|
OPEN GL ES |
[1] |
|
등록일:2018-06-24 15:40:51 (0%) 작성자: 제목:OpenGL ES 2.0 shader 최적화 방안 |
|
Per fragment 계산 대신 per vertex 계산을 하라
- Fragment 수가 vertex 수보다 훨씬 많다.
- 복잡한 수학 function을 사용하는 대신 look-up texture을 사용해라
사용하는 varying의 개수를 최소화하고 precision을 낮게 설정해라.
Fragment shader 코드를 최대한 짧게 유지해라.
- Fragment shader는 픽셀 단위로 수행되기 때문에 shader 코드가 조금만 복잡해져도 프로그램이 상당히 느려질 수 있다.
- Fragment shader 코드를 최대한 짧고 간결하게 최적화하면 성능 향상이 있다.
Non-dependent texture read가 되게 하라.
- Dependent texture read: texture 좌표가 shader에서 수행되는 계산의 결과에 따라 달라지는 경우
- Dependent texture read는 non-dependent texture read보다 더 많은 GPU cycle을 소모한다.
Precision (highp, mediump, lowp)을 최적화 해라.
- 변수의 사용 목적에 따라 precision을 알맞게 조절하여 공간, 메모리 bandwidth를 절약할 수 있다.
- Highp 가 사용되는 경우: float, vertex 위치 계산, texture 좌표 계산, lighting 계산 등 32-bit data
- Mediump가 사용되는 경우: texture 좌표 varying 등 [-65520, 65520] 범위의 16-bit data
- Lowp가 사용되는 경우: color, normals 등 [-2,2] 범위의 10-bit data
- 사용하는 uniform 개수를 최소화하고 불필요하게 uniform 변수가 사용되지 않게 해라.
- If-else, for, while과 같은 조건문을 사용하여 불필요한 코드가 수행되지 않게 해라.
Highp precision을 사용한 scalar 계산이 vector화 되는 것을 막아라.
- Scalar와 vector를 곱해야 할 때 scalar 연산을 모두 수행한 후 vector와 곱하여 최대한 scalar 상태를 유지해라.
Highp vec4 v1, v2; Highp float x, y; // Bad v2 = (v1 * x) * y; // Good v2 = v1 * (x * y); |
- Matrix의 대부분 element가 0일 때에는 full matrix 곱셈을 하지 마라.
- Fragment shader에서 discard를 쓰지 말아라.
|
[본문링크] OpenGL ES 2.0 shader 최적화 방안
|
[1]
|
|
|
|
|
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34662 |
|
|
|
|
|
|
|
|
|
Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.
|
|
|